package com.app.gamev2.objects

import android.graphics.PointF

/**
 * 氦气罐对象类，定义氦气罐的属性和方法
 */
class Bucket {
    // 位置坐标（中心点）
    var position = PointF()
    // 氦气罐等级
    var level = 1
    // 氦气罐尺寸
    var size = 0f
    // 是否在合并动画中
    var isMerging = false
    // 合并动画进度（0-1）
    var mergeProgress = 0f

    /**
     * 构造函数
     * @param x X坐标
     * @param y Y坐标
     * @param level 氦气罐等级
     * @param size 氦气罐尺寸
     */
    constructor(x: Float, y: Float, level: Int, size: Float) {
        position.x = x
        position.y = y
        this.level = level
        this.size = size
    }

    /**
     * 启动合并动画
     */
    fun startMergeAnimation() {
        isMerging = true
        mergeProgress = 0f
    }

    /**
     * 更新合并动画进度
     * @param deltaTime 时间间隔
     * @param duration 动画持续时间
     * @return 动画是否完成
     */
    fun updateMergeAnimation(deltaTime: Float, duration: Float): Boolean {
        if (isMerging) {
            mergeProgress += deltaTime / duration
            if (mergeProgress >= 1f) {
                mergeProgress = 1f
                isMerging = false
                return true // 动画完成
            }
        }
        return false
    }

    /**
     * 获取当前合并动画的缩放因子
     * @return 缩放因子
     */
    fun getMergeScale(): Float {
        if (isMerging) {
            // 合并动画的缩放效果：先放大后恢复
            return if (mergeProgress < 0.5f) {
                1 + 0.3f * (mergeProgress / 0.5f) // 放大到1.3倍
            } else {
                1.3f - 0.3f * ((mergeProgress - 0.5f) / 0.5f) // 恢复到1倍
            }
        }
        return 1f
    }

    /**
     * 获取当前合并动画的透明度
     * @return 透明度（0-1）
     */
    fun getMergeAlpha(): Float {
        if (isMerging) {
            // 合并动画的闪烁效果
            val flashCount = 4 // 闪烁次数
            val flashInterval = 1f / flashCount // 每次闪烁的间隔
            val flashProgress = (mergeProgress % flashInterval) / flashInterval
            
            // 透明度在0.5和1之间交替变化
            return if ((mergeProgress / flashInterval).toInt() % 2 == 0) {
                0.5f + 0.5f * flashProgress
            } else {
                1f - 0.5f * flashProgress
            }
        }
        return 1f
    }

    /**
     * 检查点是否在氦气罐内
     * @param x X坐标
     * @param y Y坐标
     * @return 是否在氦气罐内
     */
    fun containsPoint(x: Float, y: Float): Boolean {
        // 简化的碰撞检测：使用矩形边界
        val halfSize = size / 2
        return x >= position.x - halfSize && x <= position.x + halfSize &&
               y >= position.y - halfSize && y <= position.y + halfSize
    }
}